
from flask import Flask
from flask_cors import CORS
from flask_sqlalchemy import SQLAlchemy
from redis import Redis
from heima_toutiao.settings import config_dick, setup_log
app = Flask(__name__)
# 加载配置类---对config父类选择做优化
Config = config_dick.get('dev')

#加载日志
setup_log(Config)

# 指定app的配置来源/加载 配置类
app.config.from_object(Config)

# 创建SQLALchemy实例对象
db=SQLAlchemy(app)
# 创建redis配置
redis_cli = Redis(host=Config.REDIS_HOST,port=Config.REDIS_PORT,db=Config.REDIS_DB)
app.redis_cli = redis_cli
# 设置CORS跨域
CORS(app)

# 创建id生成器
from common.snowflake.id_worker import IdWorker
# 创建snowflake ID worker
worker  = IdWorker(datacenter_id=Config.DATACENTER_ID,worker_id=Config.WORKER_ID,sequence=Config.SEQUENCE)
app.worker = worker
# 注册转换器
from heima_toutiao.apps.utils.converters import MobileConverter
app.url_map.converters['phone'] = MobileConverter
# 注册蓝图对象
from . import urls
'''
在每次请求前  都需要提取token重点 use_id-----使用上下文管理---请求上下文
在我们解析到到token中的user_id的时候----使用应用上下文 g变量 来定义一个全局变量   进行上下文传递user_id
'''
from flask import g
from common.token.jwt_auth import check_pyjwt_token
from flask import request
@app.before_request
def before_request():

    auth=request.headers.get('Authorization')

    g.user_id=None
    g.is_refresh=None

    # 我们可以获取 Authorization 的值 [值不为None]
    # 并且以 Bearer
    if auth and auth.startswith('Bearer '):

        # 通过截取字符串来获取token
        token=auth[7:]
        # 对token进行解密
        data=check_pyjwt_token(token)

        if data:
            g.user_id = data.get('user_id')
            g.is_refresh=data.get('is_refresh')